package admincow.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;

import admincow.util.ConexionBD;
import admincow.vo.FuncionVO;
import admincow.vo.UsuarioVO;

public class FuncionDAO {
	// inicio
	public Collection<FuncionVO> buscarPorNombre(String funcion) {
		String query = "select nom_fun,p_usuario,p_eventos,p_animales,p_inseminacion,p_produccion,p_fotos,descripcion from funcion where nom_fun like '%"
				+ funcion + "%'";
		Collection<FuncionVO> c = new ArrayList<FuncionVO>();

		try {
			Connection con = ConexionBD.obtenerConexion();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(query);
			while (rs.next()) {
				FuncionVO vo = new FuncionVO();
				vo.setNom_fun(rs.getString("Nom_fun"));
				vo.setP_usuario(rs.getString("P_usuario"));
				vo.setP_eventos(rs.getString("P_eventos"));
				vo.setP_animales(rs.getString("P_animales"));
				vo.setP_inseminacion(rs.getString("P_inseminacion"));
				vo.setP_produccion(rs.getString("P_produccion"));
				vo.setP_fotos(rs.getString("P_fotos"));
				vo.setDescripcion(rs.getString("Descripcion"));
				c.add(vo);
			}
			rs.close();
			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return c;
	}
	public FuncionVO obtenerPorIdfuncion(String funcion) {
		FuncionVO vo = new FuncionVO();
		try {
			Connection con = ConexionBD.obtenerConexion();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt
					.executeQuery("select * from funcion where nom_fun='" + funcion + "'");
			if (rs.next()) {
				vo.setNom_fun(rs.getString("nom_fun"));
				vo.setP_usuario(rs.getString("p_usuario"));
				vo.setP_eventos(rs.getString("p_eventos"));
				vo.setP_animales(rs.getString("p_animales"));
				vo.setP_inseminacion(rs.getString("p_inseminacion"));
				vo.setP_produccion(rs.getString("p_produccion"));
				vo.setP_fotos(rs.getString("p_fotos"));
				vo.setDescripcion(rs.getString("descripcion"));
				
			}
			rs.close();
			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return vo;
	}

	public FuncionVO insertar(FuncionVO vo) {
		System.out.println("Ingresando al insetar usuario");
		String query = "insert into funcion(nom_fun,p_usuario,p_eventos,p_animales,p_inseminacion,p_produccion,p_fotos,descripcion) values ( ?,?,?,?,?,?,?,?)";
		System.out.println(query);
		try {
			Connection con = ConexionBD.obtenerConexion();
			PreparedStatement stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getNom_fun());
			stmt.setString(2, vo.getP_usuario());
			stmt.setString(3, vo.getP_eventos());
			stmt.setString(4, vo.getP_animales());
			stmt.setString(5, vo.getP_inseminacion());
			stmt.setString(6, vo.getP_produccion());
			stmt.setString(7, vo.getP_fotos());
			stmt.setString(8, vo.getDescripcion());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}

			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return vo;
	}

	public FuncionVO actualizar(FuncionVO vo) {
		System.out.println("Ingresando al actualizar usuario");
		String query = "update funcion set p_usuario=?,p_eventos=?,p_animales=?,p_inseminacion=?,p_produccion=?,p_fotos=?,descripcion=? where nom_fun=?";
		try {
			Connection con = ConexionBD.obtenerConexion();
			PreparedStatement stmt = con.prepareStatement(query);

			stmt.setString(1, vo.getP_usuario());
			stmt.setString(2, vo.getP_eventos());
			stmt.setString(3, vo.getP_animales());
			stmt.setString(4, vo.getP_inseminacion());
			stmt.setString(5, vo.getP_produccion());
			stmt.setString(6, vo.getP_fotos());
			stmt.setString(7, vo.getDescripcion());
			stmt.setString(8, vo.getNom_fun());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}

			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return vo;
	}

	public void eliminar(String funcion) {
		System.out.println("Ingresando al delte user");
		String query = "DELETE FROM funcion WHERE nom_fun=?";
		System.out.println("Hola mundo");
		System.out.println(funcion);
		// Table usuario
		try {
			Connection con = ConexionBD.obtenerConexion();
			PreparedStatement stmt = con.prepareStatement(query);
			
			stmt.setString(1, funcion);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar funcion");
			}
			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		String queryo = "DELETE FROM usuario_funcion WHERE nom_fun=?";
		try {
			Connection con = ConexionBD.obtenerConexion();
			PreparedStatement stmt = con.prepareStatement(queryo);
			stmt.setString(1, funcion);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar usuario_funcion");
			}
			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	public Collection<FuncionVO> listarTodos() {
		Collection<FuncionVO> c = new ArrayList<FuncionVO>();
		try {
			Connection con = ConexionBD.obtenerConexion();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt
					.executeQuery("SELECT a.idusuario,a.password,a.nombres,a.paterno,a.materno,a.correo,a.direccion,a.telefono,a.estado,b.idusuario,b.nom_fun FROM usuario a INNER JOIN usuario_funcion b ON a.idusuario = b.idusuario");
			while (rs.next()) {
				FuncionVO vo = new FuncionVO();
				vo.setNom_fun(rs.getString("nom_fun"));
				vo.setDescripcion(rs.getString("descripcion"));
				c.add(vo);
			}
			rs.close();
			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return c;
	}

	public FuncionVO validar(String idusuario, String password)
			throws SQLException {
		FuncionVO vo = new FuncionVO();
		try {
			Connection con = ConexionBD.obtenerConexion();

			String query = "SELECT a.idusuario,a.password,a.nombres,a.paterno,a.materno,a.correo,a.direccion,a.telefono,a.estado,b.idusuario,b.nom_fun FROM usuario a INNER JOIN usuario_funcion b ON a.idusuario = b.idusuario where a.idusuario=? and a.password=?";
			PreparedStatement stmt = con.prepareStatement(query);
			stmt.setString(1, idusuario);
			stmt.setString(2, password);
			ResultSet rs = stmt.executeQuery();

			if (rs.next()) {
				vo.setNom_fun(rs.getString("nom_fun"));
				vo.setDescripcion(rs.getString("descripcion"));

			} else {
				throw new SQLException("No existe.");
			}

			rs.close();
			stmt.close();
			con.close();
		} catch (SQLException e) {
			System.out.println(e.getMessage());
			throw new SQLException(e.getMessage());
		}
		return vo;
	}
	// final
}
